The present invention relates to code readers and more specifically to code readers that attempt to optimize decode processes to expedite analysis of code candidates in obtained images.
Automated identification of products using optical codes has been broadly implemented throughout industrial operations and in many other applications for many years. Optical codes are patterns composed of elements with different light reflectance or emission, assembled in accordance with predefined rules. The elements in the optical codes may be bars or spaces in a linear barcode, or the on/off pattern in a two-dimensional matrix code. The bar code or symbols can be printed on labels placed on product packaging, or directly on the product itself by direct part marking. The information encoded in a bar code or symbol can be decoded using optical readers in fixed-mount installations or in portable hand held devices. In the case of a hand held reader device, a device user directs the device toward a code often with the aid of a light target pattern generated by the device which appears on an object surface to be imaged and the device either automatically obtains images including the code or the user activates the device to obtain images.
At least some reader devices include a camera capable of generating two dimensional images of a field of view. For example, many systems currently employ a two dimensional CCD image sensor which obtains images and generates image data which is provided to a processor. The processor is programmed to examine image data to identify code candidates (e.g., bar code or symbol candidates) and attempt to decode the code candidates. At least some reader devices are programmed to obtain images of a FOV in rapid succession and to attempt to decode any code candidates in the obtained images as quickly as possible. To decode codes, the processor runs one or more decode algorithms.
When obtaining an image of a code, the quality of the image depends on several factors including the angle of a sensor with respect to a surface on which the code is applied, the material and texture of the surface on which the code is applied, code marking quality or damage after marking, ambient and device lighting characteristics, distance from the surface on which the code is applied, optical blur, camera resolution, etc. Image quality affects the ability of a processor running a specific algorithm to decode a code. For example, in many cases a simple decoding algorithm will not be able to successfully decode codes in an image unless the circumstances surrounding image acquisition are substantially ideal.
To compensate for imperfect image acquisition, relatively more complex decode algorithms have been developed. For instance, several decode algorithms have been developed which can at least partially compensate for imperfect lighting, a curved surface that a code is applied to, imperfect sensor angle with respect to the surface that a code is applied to, etc.
While complex decode algorithms work well to compensate for imperfect images, one draw back is that complex algorithms often require a greater amount of processing power and a commensurate amount of time to perform. Hereinafter, unless indicated otherwise, algorithms that are relatively complex or more generally algorithms that require a relatively long period to perform will be referred to as “expensive” or “more expensive” algorithms while algorithms that are relatively simple or more generally that require a relatively short period to complete will be referred to as “inexpensive” or “less expensive” algorithms.
While more expensive algorithms are not an issue in some applications, in applications where images are obtained in rapid succession, expensive algorithms requiring relatively long periods to complete can result in computational requirements that far exceed capabilities of reader processors. More specifically, in some cases, image sensors are capable of obtaining and providing images so quickly that a reader device processor cannot perform an expensive algorithm on all code candidates in an image prior to receiving a next image.
Where a processor cannot keep up with the computational demands required to perform an expensive algorithm for all code candidates in a rapid succession of images, one solution may be to forego analysis of candidates in next images until a reader device has attempted to decode all code candidates in a current image. Thus, for instance, where second through fourth images are obtained during the period required to attempt to decode all code candidates in a first image, the second through fourth images would be discarded when a fifth image is obtained and code candidates in the fifth image would be examined. While this solution ensures that the expensive algorithm is applied to all code candidates in a current or first image, this solution simply ignores code candidates in the second through fourth image while candidates in the first image are processed despite the fact that candidates in the subsequent images may be better suited to be decoded. In this case, the overall time required to successfully image and decode a code will be prolonged where the device is unable to successfully decode any candidate in the first image which can result in a bothersome delay for a device user.